package com.wcity.manage.common.utils;

import com.wcity.manage.dao.model.Act;
import com.wcity.manage.dao.model.Module;
import com.wcity.manage.dao.model.Role;

import java.text.MessageFormat;
import java.util.List;

/**
 * Dwz工具
 *
 * @author dy
 * @modify jn
 */
public class DwzUtil {

    /**
     * 返回鉴权结果JSON
     *
     * @param code
     * @param str
     * @return
     */
    public static String getRetAuthJson( String code, String str ) {
        return MessageFormat.format( RET_AUTH_TEM, code, str );
    }

    /**
     * 获取用户导航栏
     *
     * @param actList
     * @param sb
     * @return
     */
    public static String getNavStr(List<Act> actList, StringBuffer sb ) {

        if ( actList == null || actList.size() <= 0 ) return "";

        if ( actList != null ) {
            for ( Act tmp : actList ) {
                if ( tmp.getParentId() == 0 ) {

                    sb.append( "<div class=\"accordionHeader\"><h2><span>Folder</span>" );
                    sb.append( tmp.getActName() );
                    sb.append( "</h2></div><div class=\"accordionContent\"><ul class=\"tree treeFolder\">" );

                    if ( tmp.getChildren() != null && tmp.getChildren().size() > 0 ) {
                        getNavStr( tmp.getChildren(), sb );
                    }
                    sb.append( "</ul></div>" );

                } else {

                    sb.append( "<li><a target=\"navTab\" href=\"" ).append( tmp.getAction() ).append( "\"" );
                    sb.append( "rel=\"" ).append( tmp.getAction() ).append( "\"" );
                    sb.append(" >").append( tmp.getActName() ).append( "</a>" );

                    if ( tmp.getChildren() != null && tmp.getChildren().size() > 0 ) {
                        sb.append( "<ul>" );
                        getNavStr( tmp.getChildren(), sb );
                        sb.append( "</ul>" );
                    }
                }
            }
        }
        return sb.toString();
    }

    /**
     * 递归拼接权限树
     *
     * @param actList
     * @param sb
     * @return
     */
    public static String getRoleTree( List<Act> actList, StringBuffer sb ) {

        if ( actList == null || actList.size() <= 0 ) return "";

        for ( Act tmp : actList ) {
            // 判断是否有子树
            if ( tmp.getChildren() != null && tmp.getChildren().size() > 0 ) {
                sb.append( "<li><a tname=\"name\" tvalue=\"" )
                  .append( tmp.getAuthId() ).append( "\" >" )
                  .append( tmp.getActName() ).append( "</a><ul>" );
                getRoleTree( tmp.getChildren(), sb );
                sb.append( "</ul></li>" );
            } else {
                sb.append( "<li><a tname=\"name\" tvalue=\"" )
                  .append( tmp.getAuthId() ).append("\" >")
                  .append( tmp.getActName() ).append("</a></li>");

            }
        }
        return sb.toString();
    }

    /**
     * 递归拼接权限树
     *
     * @param actList
     * @param sb
     * @param role
     * @return
     */
    public static String getRoleTree( List<Act> actList, StringBuffer sb, Role role ) {

        if ( actList == null || actList.size() <= 0 ) return "";

        for ( Act tmp : actList ) {
            boolean isAuth = AuthUtil.auth( tmp.getAuthId(), role );
            // 判断是否有子树
            if ( tmp.getChildren() != null && tmp.getChildren().size() > 0 ) {
                if ( isAuth) {
                    sb.append( "<li><a checked=\"true\" tname=\"name\" tvalue=\"" )
                            .append( tmp.getAuthId() ).append("\" >")
                            .append( tmp.getActName() ).append("</a><ul>");
                } else {
                    sb.append("<li><a tname=\"name\" tvalue=\"")
                            .append( tmp.getAuthId() ).append("\" >")
                            .append( tmp.getActName() ).append("</a><ul>");
                }
                getRoleTree( tmp.getChildren(), sb, role );
                sb.append( "</ul></li>" );
            } else {
                if ( isAuth ) {
                    sb.append(
                            "<li><a checked=\"true\" tname=\"name\" tvalue=\"")
                            .append( tmp.getAuthId() ).append("\" >")
                            .append( tmp.getActName() ).append("</a></li>");
                } else {
                    sb.append("<li><a tname=\"name\" tvalue=\"")
                            .append( tmp.getAuthId() ).append("\" >")
                            .append( tmp.getActName() ).append("</a></li>");
                }

            }
        }
        return sb.toString();
    }

    /**
     * 拼接模块树
     * @param moduleList
     * @param sb
     * @return
     */
    public static String getModuleTree(List<Module> moduleList, StringBuffer sb, List<Integer> moduleIds){

        if ( moduleList == null || moduleList.size() <= 0 ) return "";

        for ( Module module : moduleList ) {

            // 下线则不显示
            if ( module.getStatus() != 1 ) continue;

            // 是否有该模块
            boolean isChecked = moduleIds.contains( module.getId() );

            if ( module.getChildren() != null && module.getChildren().size() > 0 ) {

                if ( isChecked ) {
                    sb.append( "<li><a checked=\"true\" tname=\"name\" tvalue=\"" )
                            .append( module.getId() ).append("\" >")
                            .append( module.getName() ).append("</a><ul>");

                } else {
                    sb.append( "<li><a tname=\"name\" tvalue=\"" )
                            .append( module.getId() ).append("\" >")
                            .append( module.getName() ).append("</a><ul>");
                }
                getModuleTree( module.getChildren(), sb, moduleIds );
                sb.append( "</ul></li>" );
            } else {

                if ( isChecked ) {
                    sb.append( "<li><a checked=\"true\" tname=\"name\" tvalue=\"" )
                            .append( module.getId() ).append("\" >")
                            .append( module.getName() ).append("</a><li>");

                } else {
                    sb.append( "<li><a tname=\"name\" tvalue=\"" )
                            .append( module.getId() ).append("\" >")
                            .append( module.getName() ).append("</a><li>");
                }
            }
        }

        return sb.toString();
    }

    /**
     * 拼接模块树
     * @param moduleList
     * @param sb
     * @return
     */
    public static String getModuleTree(List<Module> moduleList, StringBuffer sb){
        if ( moduleList == null || moduleList.size() <= 0 ) return "";

        for ( Module module : moduleList ) {
            // 下线则不显示
            if ( module.getStatus() != 1 ) continue;
            // 判断是否有子树
            if ( module.getChildren() != null && module.getChildren().size() > 0 ) {
                sb.append( "<li><a tname=\"name\" tvalue=\"" )
                        .append( module.getId() ).append( "\" >" )
                        .append( module.getName() ).append( "</a><ul>" );
                getModuleTree( module.getChildren(), sb );
                sb.append( "</ul></li>" );
            } else {
                sb.append( "<li><a tname=\"name\" tvalue=\"" )
                        .append( module.getId() ).append("\" >")
                        .append( module.getName() ).append("</a></li>");

            }
        }

        return sb.toString();

    }

    /**
     * 返回Ajax交互JSON
     *
     * @param code "200"表示成功, "300"表示失败
     * @param msg  页面弹出框所展示信息
     * @param navTabId 服务器转回的Tab
     * @param rel rel
     * @param callbackType "closeCurrent"会关闭当前Tab, "forward"会转至forwardUrl
     * @param forwardUrl
     * @return
     */
    public static String getRetAjaxJson(
            String code, String msg, String navTabId, String rel, String callbackType, String forwardUrl ) {

        StringBuffer sb = new StringBuffer();
        sb.append( "{\"statusCode\":\"" ).append( code ).append("\",\"message\":\"").append( msg ).append( "\"" );
        if ( !StringUtil.isBlank(navTabId) ) {
            sb.append( ",\"navTabId\":\"" ).append( navTabId ).append( "\"" );
        }
        if ( !StringUtil.isBlank( rel ) ) {
            sb.append( ",\"rel\":\"" ).append( rel ).append( "\"" );
        }
        if ( !StringUtil.isBlank( callbackType ) ) {
            sb.append( ",\"callbackType\":\"" ).append( callbackType ).append( "\"" );
        }
        if ( !StringUtil.isBlank( forwardUrl ) ) {
            sb.append( ",\"forwardUrl\":\"" ).append( forwardUrl ).append( "\"" );
        }
        sb.append( "}" );
        return sb.toString();
    }

    public static String RET_AUTH_TEM = "'{'\"statusCode\":\"{0}\" , \"message\":\"{1}\"}";

}
